package com.wzdigit.wms.hm.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.wzdigit.framework.orm.model.BasicDomain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.util.Date;

/**
 * <p>
 * 收货通知单明细
 * </p>
 *
 * @author
 * @since 2021-01-12
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("WMS_ASN_DTL")
@KeySequence(value = "WMS_ASN_DTL_SEQ", clazz = Integer.class)
public class AsnDtl extends BasicDomain {

    private static final long serialVersionUID = 1L;

    /**
     * 收货通知单明细ID
     */
    @TableId(value = "ASN_DTL_ID", type = IdType.INPUT)
    @ApiModelProperty(value = "收货通知单明细ID")
    private Integer asnDtlId;

    /**
     * 收货通知单表头ID
     */
    @TableField("ASN_HEADER_ID")
    @ApiModelProperty(value = "收货通知单表头ID")
    private Integer asnHeaderId;

    /**
     * 收货通知单号
     */
    @TableField("ASN_NO")
    @ApiModelProperty(value = "收货通知单号")
    private String asnNo;

    /**
     * 收货通知单行号
     */
    @TableField("ASN_LINE_NO")
    @ApiModelProperty(value = "收货通知单行号")
    private String asnLineNo;

    /**
     * 采购订单号
     */
    @TableField("PO_NO")
    @ApiModelProperty(value = "采购订单号")
    private String poNo;

    /**
     * 采购订单行号
     */
    @TableField("PO_LINE_NO")
    @ApiModelProperty(value = "采购订单行号")
    private String poLineNo;

    /**
     * 货品
     */
    @TableField("SKU_ID")
    @ApiModelProperty(value = "货品")
    private Integer skuId;

    /**
     * 货品描述
     */
    @TableField("SKU_DESC")
    @ApiModelProperty(value = "货品描述")
    private String skuDesc;

    /**
     * 货品英文描述
     */
    @TableField("SKU_DESC_EN")
    @ApiModelProperty(value = "货品英文描述")
    private String skuDescEn;

    /**
     * 货主(客户）内部的生产批次号
     */
    @TableField("LOTNO")
    @ApiModelProperty(value = "货主(客户）内部的生产批次号")
    private String lotno;

    /**
     * 供应商生产批次号
     */
    @TableField("VENDOR_LOTNO")
    @ApiModelProperty(value = "供应商生产批次号")
    private String vendorLotno;

    /**
     * 订单数量
     */
    @TableField("ORDER_QTY")
    @ApiModelProperty(value = "订单数量")
    private BigDecimal orderQty;

    /**
     * 订单数量EA － 订购产品的数量。以所选择的包装代码的最小单位（主单位）为数
     * 量单位的，并且是系统自动换算给出的，不能修改。例如包装单位为箱，1 箱 10 件，预期 2
     * 箱，2 个数量字段的数值会分别是 2（箱）与 20（件）。
     */
    @TableField("ORDER_QTY_EA")
    @ApiModelProperty(value = "订单数量EA")
    private BigDecimal orderQtyEa;

    /**
     * 收货数量
     */
    @TableField("RCV_QTY")
    @ApiModelProperty(value = "收货数量")
    private BigDecimal rcvQty;

    /**
     * 收货数量EA － 系统已经确认收货的产品数量。同样是 2 个字段，分别对应所选单位和系
     * 统主单位。由于采购订单并不直接用于收货，收货数量是在预期到货通知（ASN）关联采购
     * 订单（PO）情况下，ASN 收货时，系统自动更新对应 PO 的收货数量。
     */
    @TableField("RCV_QTY_EA")
    @ApiModelProperty(value = "收货数量EA")
    private BigDecimal rcvQtyEa;

    /**
     * 收货单位
     */
    @TableField("UNIT")
    @ApiModelProperty(value = "收货单位")
    private String unit;

    /**
     * 收货时间
     */
    @TableField("RCV_TIME")
    @ApiModelProperty(value = "收货时间")
    private Date rcvTime;

    /**
     * 释放数量
     */
    @TableField("RELEASE_QTY")
    @ApiModelProperty(value = "释放数量")
    private BigDecimal releaseQty;

    /**
     * 收货库位 － 预计接收产品的库位。系统自动给出默认的收货过渡库位（STAGE，多仓
     * 情况下默认为对应仓库的首个过渡库位，也可在系统参数中配置不同仓库、单据类型的默认
     * 收货库位），客户可根据实际情况进行修改。收货库位的选择会对后续操作有所影响。在启用
     * 系统指导上架的情况下，收货到过渡类型的库位，系统会计算上架库位。如果直接收货到存
     * 储类型的库位，系统认可为最终存储位置，不再生成上架任务。
     */
    @TableField("RCV_LOC_ID")
    @ApiModelProperty(value = "收货库位")
    private Integer rcvLocId;

    /**
     * 计划库位 － 预计接收的产品的仓内上架库位。指定后系统计算上架库位时，将采用指
     * 定的库位。
     */
    @TableField("PLAN_LOC_ID")
    @ApiModelProperty(value = "计划库位")
    private Integer planLocId;

    /**
     * 计划库位 － 预计接收的产品的仓内上架库位。指定后系统计算上架库位时，将采用指
     * 定的库位。
     */
    @TableField("RESERVE_LOC_FLAG")
    @ApiModelProperty(value = "计划库位")
    private Integer reserveLocFlag;

    /**
     * 库存性质(特殊采购性质)，K为寄售 ,E为销售订单,空白为标准转换为S
     */
    @TableField("INV_ATTR")
    @ApiModelProperty(value = "库存性质")
    private String invAttr;

    /**
     * 库存类型，空白为非限制，X为质检，S为冻结
     */
    @TableField("INV_TYPE")
    @ApiModelProperty(value = "库存类型")
    private String invType;

    /**
     * 库存地点
     */
    @TableField("WHS_ID")
    @ApiModelProperty(value = "库存地点")
    private Integer whsId;

    /**
     * 总体积
     */
    @TableField("TOTAL_CUBIC")
    @ApiModelProperty(value = "总体积")
    private BigDecimal totalCubic;

    /**
     * 总毛量
     */
    @TableField("TOTAL_GROSS_WEIGHT")
    @ApiModelProperty(value = "总毛量")
    private BigDecimal totalGrossWeight;

    /**
     * 总净重
     */
    @TableField("TOTAL_NET_WEIGHT")
    @ApiModelProperty(value = "总净重")
    private BigDecimal totalNetWeight;

    /**
     * 总价
     */
    @TableField("TOTAL_PRICE")
    @ApiModelProperty(value = "总价")
    private BigDecimal totalPrice;

    /**
     * 冻结原因 － 产品的冻结原因选择。当进行仓库活动时，对产品有指定的要求时，可选
     * 择相应的冻结原因。系统提供正常、产品损坏、过期产品、质检?上架、上架?质检、质检/
     * 按库位上架 6 种选择。正常为默认值，表示产品不被冻结，按正常流程运作。如果产品档案
     * 中设置为非正常值，系统可以执行入库即冻结的收货处理。
     */
    @TableField("HOLD_CODE")
    @ApiModelProperty(value = "冻结原因代码")
    private Integer holdCode;

    /**
     * 冻结原因描述
     */
    @TableField("HOLD_REASON")
    @ApiModelProperty(value = "冻结原因描述")
    private String holdReason;

    /**
     * 破损数量 － 针对收货产品，外包装破损需要记录，但不影响产品出库，不需要在库存
     * 中跟踪，仅在入库报表中体现的情况，因此另行记录本订单行产品的破损数量。
     */
    @TableField("DAMAGE_QTY_EA")
    @ApiModelProperty(value = "破损数量")
    private BigDecimal damageQtyEa;

    /**
     * 拒收数量 －产品到达仓库，但由于破损等原因，不可收货（或者部分拒收），拒收数量
     * 不计入库存。为了方便进行供应商管理，或提供报表统计，需要记录曾经到货但未收货的拒
     * 收数量。
     */
    @TableField("REJECT_QTY")
    @ApiModelProperty(value = "拒收数量")
    private BigDecimal rejectQty;

    /**
     * 拒收数量EA
     */
    @TableField("REJECT_QTY_EA")
    @ApiModelProperty(value = "拒收数量EA")
    private BigDecimal rejectQtyEa;

    /**
     * 冻结原因 － 产品的冻结原因选择。当进行仓库活动时，对产品有指定的要求时，可选
     * 择相应的冻结原因。系统提供正常、产品损坏、过期产品、质检?上架、上架?质检、质检/
     * 按库位上架 6 种选择。正常为默认值，表示产品不被冻结，按正常流程运作。如果产品档案
     * 中设置为非正常值，系统可以执行入库即冻结的收货处理。
     */
    @TableField("REJECT_CODE")
    @ApiModelProperty(value = "冻结原因代码")
    private Integer rejectCode;

    /**
     * 绝收原因描述
     */
    @TableField("REJECT_REASON")
    @ApiModelProperty(value = "绝收原因描述")
    private String rejectReason;

    /**
     * 质检状态 － ASN 进行质检操作的相关状态。系统提供 未创建质检单、质检单创建、
     * 部分质检、全部质检、质检取消、质检关闭 状态项，根据对应质检单操作情况自动更新。新
     * 增 ASN 默认为“未创建质检单”状态。
     */
    @TableField("QC_STATUS")
    @ApiModelProperty(value = "质检状态")
    private Integer qcStatus;

    /**
     * 超额收货百分比－精细化超额收货管控使用，每行 ASN 可以有不同超额收货比例。常
     * 见与 ERP 根据采购订单下达，不同采购订单超额比例不同。
     */
    @TableField("OVER_RCV_PCT")
    @ApiModelProperty(value = "超量收货百分比")
    private BigDecimal overRcvPct;

    /**
     * 打印标记
     */
    @TableField("PRINT_FLAG")
    @ApiModelProperty(value = "打印标记")
    private Integer printFlag;

    /**
     * 批次属性1
     */
    @TableField("LOT_ATTR_1")
    @ApiModelProperty(value = "批次属性1")
    private String lotAttr1;

    /**
     * 批次属性2
     */
    @TableField("LOT_ATTR_2")
    @ApiModelProperty(value = "批次属性2")
    private String lotAttr2;

    /**
     * 批次属性3
     */
    @TableField("LOT_ATTR_3")
    @ApiModelProperty(value = "批次属性3")
    private String lotAttr3;

    /**
     * 批次属性4
     */
    @TableField("LOT_ATTR_4")
    @ApiModelProperty(value = "批次属性4")
    private String lotAttr4;

    /**
     * 批次属性5
     */
    @TableField("LOT_ATTR_5")
    @ApiModelProperty(value = "批次属性5")
    private String lotAttr5;

    /**
     * 批次属性6
     */
    @TableField("LOT_ATTR_6")
    @ApiModelProperty(value = "批次属性6")
    private String lotAttr6;

    /**
     * 批次属性7
     */
    @TableField("LOT_ATTR_7")
    @ApiModelProperty(value = "批次属性7")
    private String lotAttr7;

    /**
     * 批次属性8
     */
    @TableField("LOT_ATTR_8")
    @ApiModelProperty(value = "批次属性8")
    private String lotAttr8;

    /**
     * 批次属性9
     */
    @TableField("LOT_ATTR_9")
    @ApiModelProperty(value = "批次属性9")
    private String lotAttr9;

    /**
     * 批次属性10
     */
    @TableField("LOT_ATTR_10")
    @ApiModelProperty(value = "批次属性10")
    private String lotAttr10;

    /**
     * 批次属性11
     */
    @TableField("LOT_ATTR_11")
    @ApiModelProperty(value = "批次属性11")
    private String lotAttr11;

    /**
     * 批次属性12
     */
    @TableField("LOT_ATTR_12")
    @ApiModelProperty(value = "批次属性12")
    private String lotAttr12;

    /**
     * 数据来源
     */
    @TableField("DATA_SOURCE")
    @ApiModelProperty(value = "数据来源")
    private String dataSource;

    /**
     * 用户自定义字段1
     */
    @TableField("UDF1")
    @ApiModelProperty(value = "用户自定义字段1")
    private String udf1;

    /**
     * 用户自定义字段2
     */
    @TableField("UDF2")
    @ApiModelProperty(value = "用户自定义字段2")
    private String udf2;

    /**
     * 用户自定义字段3
     */
    @TableField("UDF3")
    @ApiModelProperty(value = "用户自定义字段3")
    private String udf3;

    /**
     * 用户自定义字段4
     */
    @TableField("UDF4")
    @ApiModelProperty(value = "用户自定义字段4")
    private String udf4;

    /**
     * 用户自定义字段5
     */
    @TableField("UDF5")
    @ApiModelProperty(value = "用户自定义字段5")
    private String udf5;

    /**
     * 备注
     */
    @TableField("COMMENTS")
    @ApiModelProperty(value = "备注")
    private String comments;

    /**
     * 状态
     */
    @TableField("STATUS")
    @ApiModelProperty(value = "状态")
    private Integer status;

    /**
     * 货品品质状态
     */
    @TableField("QA_STATUS")
    @ApiModelProperty(value = "货品品质状态")
    private Integer qaStatus;


    /**
     * 送检单号
     */
    @TableField("INSP_NO")
    @ApiModelProperty(value = "送检单号")
    private String inspNo;
    
    /**
     * 来源单号
     */
    @TableField("SOURCE_NO")
    private String sourceNo;

    /**
     * 来源单行号
     */
    @TableField("SOURCE_LINE_NO")
    private String sourceLineNo;

    /**
     * 销售订单号
     */
    @TableField("SO_NO")
    private String soNo;

    /**
     * 销售订单行号
     */
    @TableField("SO_LINE_NO")
    private String soLineNo;

    /**
     * 成本中心
     */
    @TableField("COST_CENTER")
    private String costCenter;

    /**
     * 预留号
     */
    @TableField("RESERVE_NO")
    private String reserveNo;

    /**
     * 预留项目
     */
    @TableField("RESERVE_ITEM")
    private String reserveItem;
}
